Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Amélioration du temps d'indexation #16

Merged
merged 4 commits into from
Mar 28, 2024
Merged

Amélioration du temps d'indexation #16

merged 4 commits into from
Mar 28, 2024

Conversation

Riron
Copy link
Contributor

@Riron Riron commented Feb 9, 2024

Proposition de quelques modifs mineures:

  • désactiver les refresh, et refresh manuellement en one shot à la fin d'un process d'indexation. Il faudra penser à couper le refresh sur les index déjà existants si on part la dessus
  • ne plus générer d'ID mais laisser ES affecter un ID à chaque élément. Si on affecte nous même un ID, ES doit checker pour chaque élément si cet identifiant existe déjà avant de pouvoir insérer l'élément, ce qui est assez couteux. Il faut cependant qu'on s'assure que lorsqu'on query on ne requête pas ce champ identifiant et plutot se baser sur le siret
  • il m'a semblé qu'on avait un run de retry non batché en cas d'erreur 429 qui n'était pas nécessaire. La logique de wait & retry avec un temps exponentiel est me semble-t-il suffisante et évite de surcharger d'opérations ES
  • lorsqu'on a plusieurs workers, le code attendait que tous les workers aient fini d'indexer avant de passer au batch suivant. Je propose de gérer un compteur de promesses en dehors du process d'indexation pour permettre que le nombre de workers affectés soit toujours utilisé à son maximum

Pour info, lors de mon dernier test sur un ES Scalingo starter 4GB, j'ai indexé les siret en 2h40 avec les paramètres suivants (contre environ 6h sur les derniers runs airflow, vers une gros ES 16gb redondé, mais qui a de la charge métier):

  • INDEX_CHUNK_SIZE 10000
  • TD_SIRENE_INDEX_MAX_CONCURRENT_REQUESTS 4
  • TD_SIRENE_INDEX_MAX_HIGHWATERMARK 16384

Il m'a semblé contre productif de monter le highWaterMark dans mes tests, car la data est déjà bufferisée plus vite que ce que l'ES peut traiter, et donc augmenter la valeur ne faisait qu'augmenter la pression mémoire de la machine.

package.json Show resolved Hide resolved
@Riron Riron changed the title Proposition d'améliorations NE PAS MERGER AVANT LE 12/03 - Proposition d'améliorations Feb 22, 2024
@Riron Riron force-pushed the test branch 2 times, most recently from e7b8e37 to 9040c6b Compare March 5, 2024 17:04
@Riron
Copy link
Contributor Author

Riron commented Mar 7, 2024

Après test sur l'ES de prod redescendu à 8gb, et utilisé par l'app en parallèle => 3h20 pour l'indexation complète.
Vs 8h+ quelques jours avant avec l'ancienne version

@Riron Riron changed the title NE PAS MERGER AVANT LE 12/03 - Proposition d'améliorations Amélioration du temps d'indexation Mar 19, 2024
@Riron Riron merged commit db3bd5b into main Mar 28, 2024
3 checks passed
@Riron Riron deleted the test branch March 28, 2024 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants